# encoding: utf-8
# 项目名称： 常用设计模式
# @File  : 008-适配器模式.py
# @Author: sun hao
# @Desc : 
# @Date  :   19:30 2024/10/29

from abc import ABCMeta, abstractmethod


class Payment(metaclass=ABCMeta):

    @abstractmethod
    def pay(self, money):
        pass


class Alipay(Payment):
    def pay(self, money):
        print("支付宝")
        print(f"支付{money}元")


class WeChatPay(Payment):
    def pay(self, money):
        print("微信")
        print(f"支付{money}元")


class BankPay:
    """
        新来一个银行卡支付，没有pay方法怎么搞？
    """

    def cost(self, money):
        print("银行卡")
        print(f"支付{money}元")


class AppleIphonePay:
    """
        新来一个苹果手机支付，没有pay方法怎么搞？
    """

    def cost(self, money):
        print("苹果支付")
        print(f"支付{money}元")


class HuaWeiPhonePay:
    """
        新来一个华为手机支付，没有pay方法怎么搞？
    """

    def cost(self, money):
        print("华为支付")
        print(f"支付{money}元")


p1 = Alipay()
p1.pay(1024)


# --------情况1,一个class对不上  使用多继承--------
class NewBankPay(Payment, BankPay):
    """

        写一个适配器类，继承 Payment 与 BankPay
    """

    def pay(self, money):
        self.cost(money)


print("类适配器，使用多继承模式")
p2 = NewBankPay()
p2.pay(1024)


# --------情况2,多个class对不上  使用组合--------

class PaymentAdapter(Payment):
    def __init__(self, payment_type):
        self.payment_type = payment_type

    def pay(self, money):
        self.payment_type.cost(money)


print("对象适配器，使用组合模式")
p3 = PaymentAdapter(HuaWeiPhonePay())
p3.pay(1024)
